#include "Searcher.hpp"
#include "cpp-httplib/httplib.h"  //引入http库
#include "Log.hpp"

const std::string root_path = "./wwwroot";             //网页内容信息
const std::string input = "./data/raw_html/raw.txt";   //处理后的资源的路径


int main()
{
    ns_searcher::Searcher Search;    //创建一个Searcher对象，供后面拿到用户的所搜关键字进行搜索
    Search.InitSearcher(input);      //初始化Searcher对象，（包含建立索引）
     
    // 引入httplib库，创建一个httplib::Server对象Svr，用于构建一个HTTP服务端  
    httplib::Server Svr;                  
    // 设置服务器的基目录，这个目录通常用于静态文件服务，比如HTML、CSS、JS等文件的根目录   
    Svr.set_base_dir(root_path.c_str());     

    // 为服务端添加一个GET请求的处理函数，当客户端访问/s路径时，会触发这个函数  
    // 使用了lambda表达式来捕获Search对象，并处理请求和响应
    Svr.Get("/s",[&Search](const httplib::Request& Req,httplib::Response &Res)
    {
        // 检查请求中是否包含名为"word"的参数，如果没有，则返回错误消息
        if(!Req.has_param("word"))
        {
            Res.set_content("NO Search key word","text/plain:charset=utf-8");
            return;
        }
        // 从请求中获取名为"word"的参数值 
        std::string word = Req.get_param_value("word");

        // 调用Search对象的Search方法
        std::string json_string;
        Search.Search(word,&json_string);

        if(json_string.size()==0)
        {
            Res.set_content("未找到相关内容，请检查输入是否正确 ","text/plain:charset=utf-8");
        }

        // 如果找到了内容，则将json_string返回
        Res.set_content(json_string,"application/json");
    });

    // 使服务器监听所有网络接口（0.0.0.0）上的8081端口，等待并处理客户端的请求  
    Svr.listen("0.0.0.0",8081);

    return 0;
}